Startpunkt
Zuletzt hatte ich mich wieder mit der Archivveraltung beschäftigt. Verbesserungen sind ja "per default" gut, Patches werden gestrickt wie sie gebraucht werden.
Größtes Ärgerniss war, dass die aus Excel generierte Mail an den Archivverwalter ohne die Signatur des Nutzers daher kam. Dies wurde von mir behelfsmäßig mit "SendKeys" bewerkstelligt.
Diesen Pferdefuß wollte ich nun beseitigen.
So sah der Code aus:
'Hier wird die HTML Mail erstellt
.HTMLBody = "<style>body{font-family:Arial;font-size: 11pt;}</style> <body>Guten Tag, <br><br>wir bitten um Abholung der folgenden Archivakten.<br>Danke bereits vorab<br><br></body>"
'Hier wird die Mail nochmals angezeigt
.Display
SendKeys "^{END}"
SendKeys "%"
SendKeys "{I}"
SendKeys "{T}"
SendKeys "{S}"
SendKeys "~"
Ich hatte mir von verschiedenen Foren unterschiedlichste Lösungen rausgesucht, die allesamt nicht funktionierten.
Einmal schaffte ich es zwar, die Signatur zu übernehmen, jedoch nahm sie die Formatierung des restlichen Textes an und verlor ihre Zeilenumbrüche. Dafür war der HTML-Body verwantwortlich welcher nunmal die Umbrüche am <br> erkennt.
HTML? Auf Wiedersehen!
Der HTML-Text musste weg, soweit so gut. Das ".Body"-Attribut hatte ich bereits in vielen Beispiel-Codes gesehen. Im Gegensatz zum HTML-Body, dessen Schriftart ich per <style> formatieren konnte, übernimmt .Body die voreingestellte Standart-Schrift (Der findige Leser merkt jetzt schon "Ja, da muss er später bestimmt nochmal ran..."). Aber sei es drum.
Die Zeilenumbrüche ersetzte ich durch ein Chr-Funktion. Diese fügt ASCII-Zeichen ein und eignet sich hervorragend für "Non-Printable-Characters".
Mit Chr(10) fügte ich also Zeilenumbrüche oder "NewLine" ein.
Weiter ASCII-Zeichen findet Ihr unter www.asciitable.com.
Nun war aber das Grundproblem immer noch nicht gelöst.
Signatur, wann kommst du?
Ich schaute mir nochmal den Ablauf an, in dem eine Mail erstellt wird. Irgendwo im Entstehungsprozess schien Outlook ja die Signatur in den Body zu schreiben. Eine eigene Prozedur (die ich hätte aufrufen können), wie etwa ein ".signature.add" gab es nicht.
Die Löstung war so einfach und doch nicht zu sehen. In einem Hänger von Outlook beim Öffnen der 20. leeren Mail sah ich, dass die Mail zwar angezeigt wurde, aber erst kurz danach die Signatur erschien.
Also flux .Display und .Body die Plätze getauscht.
Schon war im Fenster zu sehen, dass kurz die Signatur aufflackerte und dann vom Text verrdrängt wurde, als .Body modifiziert wurde.
Der Durchbruch war da, den Code seht ihr hier:
Dim Nachricht as Object
Dim AWS As String'Aktive Arbeitsmappe wird als mail gesendet
AWS = ThisWorkbook.FullName'InitializeOutlook = TrueSet Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = "Empfänger"
.Subject = "Meldung Archiv " & Date
.attachments.Add AWS
'Hier wird die Mail nochmals angezeigt
.Display
'Hier wird die Mail erstellt
.Body = "Guten Tag," & Chr(10) & Chr(10) & "wir bitten um Abholung der folgenden Archivakten." & Chr(10) & "Danke bereits vorab" & Chr(10) & .Body
End With
Falls Ihr Fragen habt oder mehr wissen wollt, scheut Euch nicht zu kommentieren. Ich freu mich über alle Nachrichten.
Happy geht es in eine viel zu warme Mittagspause 🙂